﻿using System;

namespace er
{
    class Work2
    {
        //定义一个结构体，名为PersonStruct，有三个成员变量：姓名、电话、地址，
        //在主方法中，创建一个PersonStruct结构体对象p1，为p1的成员变量赋值。
        //再声明一个PersonStruct结构体变量p2，把p1赋值给p2，改变p2的姓名，打印p1的内容。


        //定义一个类，名为PersonClass，有三个成员变量：姓名、电话、地址，
        //在主方法中，创建一个PersonClass对象p3，为p3的成员变量赋值。
        //再声明一个PersonClass变量p4，把p3赋值给p4，改变p4的姓名，打印p3的内容。


        //观察打印结果，并在在注释中，说下你对此的认识（它们为什么会这样？）

        //struct是值类型，数据存储在栈中，引用时引用的是值
        //class是引用类型，数据存储在堆中，引用时引用的是方法

        static void Main(string[] args)
        {
            PersonStruct P1 = new PersonStruct();
            P1.Name = "张三";
            P1.TelepgoneNumber = "110";
            P1.Add = "罗翔家";

            PersonStruct P2 = new PersonStruct();
            P2 = P1;
            P2.Name = "法外狂徒张三";
            Console.WriteLine("姓名：{0}，电话号码：{1}，地址：{2}", P1.Name, P1.TelepgoneNumber, P1.Add);


            PersonClass P3 = new PersonClass();
            P3.Name = "张三";
            P3.TelepgoneNumber = "110";
            P3.Add = "罗翔家";

            PersonClass P4 = new PersonClass();
            P4 = P3;
            P4.Name = "法外狂徒张三";
            Console.WriteLine("姓名：{0}，电话号码：{1}，地址：{2}", P3.Name, P3.TelepgoneNumber, P3.Add);
            //   //struct是值类型，存储在栈内存，传参数时是值传递，class是引用数据类型，实例化的对象在堆内存里，传参数时是引用传递

        }

        struct PersonStruct
        {
            public string Name;
            public string TelepgoneNumber;
            public string Add;
        }

        class PersonClass
        {
            public string Name;
            public string TelepgoneNumber;
            public string Add;
        }
    }
}
